home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / SimHector / loader / Loader.cxx next >
C/C++ Source or Header  |  1995-07-26  |  2KB  |  69 lines

  1. /////////////////////////////////////////////////////////////////////////////// //
  2. //
  3. // Loader.cxx
  4. //
  5. // By: Bradford W. Mott
  6. // November 5,1993
  7. //
  8. ///////////////////////////////////////////////////////////////////////////////
  9.  
  10. #include <iostream.h>
  11. #include <fstream.h>
  12. #include "BasicCPU.hxx"
  13. #include "Tools.hxx"
  14. #include "Loader.hxx"
  15.  
  16. ///////////////////////////////////////////////////////////////////////////////
  17. // Load the named file into the address space 
  18. ///////////////////////////////////////////////////////////////////////////////
  19. String Loader::Load(const char* filename, int space)
  20. {
  21.   String error;
  22.  
  23.   // Open the file for reading
  24.   fstream file(filename, ios::in);
  25.  
  26.   // Make sure the file was opened
  27.   if(file.bad())
  28.   {
  29.     error="ERROR: Could not open file!!!";
  30.     return(error);
  31.   }
  32.  
  33.   error=LoadHectorObjectFile(file,space);
  34.  
  35.   return(error);
  36. }
  37.  
  38. ///////////////////////////////////////////////////////////////////////////////
  39. // Load in a Hector object file into an address space
  40. ///////////////////////////////////////////////////////////////////////////////
  41. String Loader::LoadHectorObjectFile(fstream& file,int space)
  42. {
  43.   unsigned long address;
  44.   String line;
  45.   int t,length,byte;
  46.  
  47.   while(1)
  48.   {
  49.     file >> line;
  50.     if(file.eof())
  51.       break;
  52.  
  53.     if((line.length()<9) || (line[4]!='/'))
  54.       return("ERROR: Incorrect file format!!!");
  55.  
  56.     address=StringToInt(line(0,4)) * CPU()->Granularity();
  57.     line.del(0,5);
  58.     length=line.length()/2;
  59.     for(t=0;t<length;++t)
  60.     {
  61.       byte=StringToInt(line(0,2));
  62.       line.del(0,2);
  63.       CPU()->address_space[space].Poke(address+t,(unsigned char)byte);
  64.     }
  65.   }
  66.   return("");
  67. }
  68.  
  69.